import React from 'react';

export default () => {
  {
    let x1 = 3; // 类型推断为 number
    let x2 = [0, 1, null]; // 类型推断为 (number | null)[]

    // TypeScript类型检查器使用 Window.onmousedown 函数的类型来推断右边函数表达式的类型。
    // window.onmousedown = function (mouseEvent) { //<- Error
    //   console.log(mouseEvent.button);
    // };

    window.onmousedown = function(mouseEvent: any) {
      console.log(mouseEvent.button);
    };
  }
  return (
    <div>
      <h1>类型推断</h1>
      <p>1. TypeScript里，在有些没有明确指出类型的地方，类型推论会帮助提供类型。</p>
      <p>2. 如果没有找到最佳通用类型的话，类型推断的结果为联合数组类型。</p>
      <p>3. TypeScript类型推论也可能按照相反的方向进行。 这被叫做“按上下文归类”。如果上下文类型表达式包含了明确的类型信息，上下文的类型被忽略。</p>
      <p>4. 上下文归类会在很多情况下使用到。 通常包含函数的参数，赋值表达式的右边，类型断言，对象成员和数组字面量和返回值语句。</p>
    </div>
  );
};
